package com.msh.artascope.devcloud.service.service;

import com.msh.artascope.devcloud.client.po.EnvPo;
import com.msh.artascope.devcloud.client.qo.EnvQo;
import com.msh.artascope.devcloud.service.model.query.EnvQueryVo;
import com.msh.artascope.devcloud.service.model.vo.EnvVo;
import com.msh.frame.client.base.TenantBaseService;
import com.msh.frame.client.common.Result;
import java.util.Collection;
import java.util.List;

/**
 * @author shihu
 * @mail m-sh@qq.com
 */
public interface EnvService extends TenantBaseService<EnvPo,EnvQo> {

// ----------前端vo处理-------------------------------------------------------
  /**
   * id查询
   * @param id 主键id
   * @return  查询Vo列表
   */
  EnvVo getVo(Long id, Long tenantId);

  /**
   * 查询
   * @param q 查询QueryVo
   * @return  查询Vo列表
   */
  List<EnvVo> listVo(EnvQueryVo q);

  /**
   * 分页查询
   * @param q 查询QueryVo
   * @return  分页查询Po列表
   */
  Result<List<EnvVo>> pageVo(EnvQueryVo q);


  /**
   * 环境复制
   * @param id
   * @param newEnv
   * @return
   */
  EnvVo copyEnvConfig(Long id, String newEnv, String newNamespace, Long tenantId);

  /**
   * 环境复制
   *
   * @param sourceEnvId
   * @param targetEnvId
   * @param domainConfigMap 更新域名
   * @return
   */
  void copyProjectConfig(Long sourceEnvId, Long targetEnvId, Collection<Long> projectIds, Long tenantId);

  /**
   * 删除命名空间
   * @param id
   * @param tenantId
   */
  void deleteNamespace(Long id, Long tenantId);

  /**
   * 删除项目信息
   * @param id
   * @param tenantId
   */
  void deleteProjectInfo(Long id, Long tenantId);

  /**
   * 重新构建命名空间
   * @param id
   * @param tenantId
   */
  void initNamespace(Long id, Long tenantId);
}
